from django.shortcuts import render, HttpResponse, redirect
from web.forms.account import RegisterModelForm,SendSmsModel,Login_SMS_Form,LoginForm
import uuid
from django.http import JsonResponse
from web import models
from django.db.models import Q
import datetime

def register(request):
    """注册"""
    if request.method == 'GET':
        form = RegisterModelForm()
        return render(request, 'register.html', {'form': form})

    form = RegisterModelForm(request.POST)
    if form.is_valid():
        # 验证通过，写入数据库
        # instance = form.save() 在数据库新增一条数据，并将新增的这条数据赋值给instance
        instance = form.save()

        policy_object = models.PricePolice.objects.filter(category=1,title='个人免费版').first()
        # 创建交易记录
        models.Transaction.objects.create(
            status=2,
            order=str(uuid.uuid4()),
            user=instance,
            price_police=policy_object,
            count=0,
            price=0,
            start_datetime=datetime.datetime.now()
        )
        return JsonResponse({'status': True,'data':'/login/'})
    return JsonResponse({'status': False,'data':form.errors})


def send_sms(request):
    """发送短信"""
    form = SendSmsModel(request,data=request.GET)
    # 只是验证手机号： 不能为空，格式是否正确
    if form.is_valid():
        return JsonResponse({'status':True})
    return JsonResponse({'status':False,'error':form.errors})


def login_sms(request):
    """短信登录"""
    if request.method == 'GET':
        form = Login_SMS_Form()
        return render(request,'login_sms.html',{'form':form})
    form = Login_SMS_Form(request.POST)
    if form.is_valid():
        #用户输入正确，登录成功
        mobile_phone = form.cleaned_data['mobile_phone']
        #把用户名写到session里面去
        user_object = models.UserInfo.objects.filter(mobile_phone=mobile_phone).first()
        request.session['user_id'] = user_object.id

        return JsonResponse({'status':True,'data':'/index/'})
    return JsonResponse({'status':False,'error':form.errors})


def login(request):
    """
    用户名和密码登录
    """
    if request.method == 'GET':
        form = LoginForm(request)
        return render(request, 'login.html', {'form': form})
    form = LoginForm(request, data=request.POST)
    if form.is_valid():
        username = form.cleaned_data['username']
        password = form.cleaned_data['password']

        # user_object = models.UserInfo.objects.filter(username=username, password=password).first()
        #  (手机=username and pwd=pwd) or (邮箱=username and pwd=pwd)

        user_object = models.UserInfo.objects.filter(Q(email=username) | Q(mobile_phone=username)).filter(
            password=password).first()
        if user_object:
            # 登录成功为止1
            request.session['user_id'] = user_object.id
            request.session.set_expiry(60 * 60 * 24 * 14)

            return redirect('index')

        form.add_error('username', '用户名或密码错误')

    return render(request, 'login.html', {'form': form})


def image_code(request):
    """
    生成图片验证码
    """
    from utils.image_code import check_code
    from io import BytesIO
    image_object,code = check_code()
    request.session['image_code'] = code
    request.session.set_expiry(60) #主动设置session的过期时间
    stream = BytesIO()
    image_object.save(stream,'png')
    return HttpResponse(stream.getvalue())



def logout(request):
    request.session.flush()
    return redirect('index')

